//时间戳转换成日期时间
function js_date_time(unixtime) {
  if(!unixtime) return ''

  var date = new Date(unixtime * 1000);
  var y = date.getFullYear();
  var m = date.getMonth() + 1;
  m = m < 10 ? "0" + m : m;
  var d = date.getDate();
  d = d < 10 ? "0" + d : d;
  var h = date.getHours();
  h = h < 10 ? "0" + h : h;
  var minute = date.getMinutes();
  var second = date.getSeconds();
  minute = minute < 10 ? "0" + minute : minute;
  second = second < 10 ? "0" + second : second;
  // return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second;//年月日时分秒
  return y + "-" + m + "-" + d + " " + h + ":" + minute;
}

/**
 * 日期转换方法，date是一个Date类型，fmt是日期形式的表达式
 *  比如今天  dateFormat(new Date(), "yyyy-MM-dd")
 * @param {*} date
 * @param {*} fmt
 * @returns
 */
function dateFormat (date, fmt) {
  if(!date) return ''

  // author: meizz
  var o = {
    "M+": date.getMonth() + 1, // 月份
    "d+": date.getDate(), // 日
    "h+": date.getHours(), // 小时
    "m+": date.getMinutes(), // 分
    "s+": date.getSeconds(), // 秒
    "q+": Math.floor((date.getMonth() + 3) / 3), // 季度
    S: date.getMilliseconds(), // 毫秒
  };
  if (/(y+)/.test(fmt))
    fmt = fmt.replace(
      RegExp.$1,
      (date.getFullYear() + "").substr(4 - RegExp.$1.length)
    );
  for (var k in o)
    if (new RegExp("(" + k + ")").test(fmt))
      fmt = fmt.replace(
        RegExp.$1,
        RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)
      );
  return fmt;
}

//获取当前周日期
function curWeekDate(day) {
  var currentDate = new Date(day) || new Date();
  var timesStamp = currentDate.getTime();
  var currenDay = currentDate.getDay();
  var dates = [];
  for (var i = 0; i < 7; i++) {
    let date = new Date(
      timesStamp + 24 * 60 * 60 * 1000 * (i - ((currenDay + 6) % 7))
    );
    // let handleDate = date.getDate()
    dates.push(date);
  }
  return dates;
}

function getAge(birthday) {
  // 新建日期对象
  let date = new Date();
  // 今天日期，数组，同 birthday
  let today = [date.getFullYear(), date.getMonth() + 1, date.getDate()];
  // 分别计算年月日差值
  let age = today.map((value, index) => {
    return value - birthday[index];
  });
  // 当天数为负数时，月减 1，天数加上月总天数
  if (age[2] < 0) {
    // 简单获取上个月总天数的方法，不会错
    let lastMonth = new Date(today[0], today[1], 0);
    age[1]--;
    age[2] += lastMonth.getDate();
  }
  // 当月数为负数时，年减 1，月数加上 12
  if (age[1] < 0) {
    age[0]--;
    age[1] += 12;
  }
  return age[0];
}

/**
 * @description 绑定事件 on(element, event, handler)
 */
const on = (function () {
  if (document.addEventListener) {
    return function (element, event, handler) {
      if (element && event && handler) {
        element.addEventListener(event, handler, false);
      }
    };
  } else {
    return function (element, event, handler) {
      if (element && event && handler) {
        element.attachEvent("on" + event, handler);
      }
    };
  }
})();

/**
 * 移除某个元素的监听事件
 */
const off = (function () {
  if (document.removeEventListener) {
    return function (element, event, handler) {
      if (element && event) {
        element.removeEventListener(event, handler, false);
      }
    };
  } else {
    return function (element, event, handler) {
      if (element && event) {
        element.detachEvent("on" + event, handler);
      }
    };
  }
})();

/**
 * 10000 => "10,000"
 * @param {number} num
 */
function toThousandFilter(num) {
  return (num || 0)
    .toString()
    .replace(/^-?\d+/g, (m) => m.replace(/(?=(?!\b)(\d{3})+$)/g, ","));
}

/**
 * 输入框只能输入数字的限制
 */
function onInput(num, limit = 2, max) {
  let str = num;
  let len1 = str.substr(0, 1);
  let len2 = str.substr(1, 1);
  //如果第一位是0，第二位不是点，就用数字把点替换掉
  if (str.length > 1 && len1 == 0 && len2 != ".") {
    str = str.substr(1, 1);
  }
  //第一位不能是.
  if (len1 == ".") {
    str = "";
  }
  //限制只能输入一个小数点
  if (str.indexOf(".") != -1) {
    let str_ = str.substr(str.indexOf(".") + 1);
    if (str_.indexOf(".") != -1) {
      str = str.substr(0, str.indexOf(".") + str_.indexOf(".") + 1);
    }
  }

  if (limit) {
    str = str.replace(/[^\d^\.]+/g, ""); // 保留数字和小数点
    if (limit / 1 === 1) {
      str = str.replace(/^\D*([0-9]\d*\.?\d{0,1})?.*$/, "$1"); // 小数点后只能输 1 位
    } else {
      str = str.replace(/^\D*([0-9]\d*\.?\d{0,2})?.*$/, "$1"); // 小数点后只能输 2 位
    }
  } else {
    str = str.replace(/[^\d]+/g, ""); // 保留数字和小数点
  }

  if (max && str >= max) {
    return max;
  }

  return str;
}

function toEncode(data) {
		return new Buffer(data).toString('base64');
}

function toDecode(data) {
	return new Buffer(data, 'base64').toString('utf8')
}

module.exports = {
  js_date_time: js_date_time,
  dateFormat: dateFormat,
  curWeekDate: curWeekDate,
  getAge: getAge,
  on: on,
  off: off,
  toThousandFilter: toThousandFilter,
  onInput,
  toEncode: toEncode,
  toDecode: toDecode
};
